# Contributor: Isaac Dunham <ibid.ag@gmail.com>
# Maintainer: Marian Buschsieweke <marian.buschsieweke@ovgu.de>
pkgname=texlive
pkgver=20200406
pkgrel=1
pkgdesc="Comprehensive TeX document production system"
url="https://tug.org/texlive/"
arch="all !mips64 !s390x" # luatex fails on s390x
license="GPL-2.0-or-later AND GPL-3.0-or-later"
options="!check" # no unit tests provided
depends="perl texmf-dist>=2020.55416"
makedepends="freetype-dev libpng-dev poppler-dev icu-dev harfbuzz-dev
	cairo-dev pixman-dev zziplib-dev libpaper-dev graphite2-dev
	libxmu-dev fontconfig-dev libxaw-dev motif-dev"
triggers="$pkgname.trigger=/usr/share/texmf-dist"
subpackages="
	$pkgname-static
	$pkgname-dev
	$pkgname-doc
	xdvik:xdvi
	$pkgname-dvi:dvi
	$pkgname-full:meta:noarch
	$pkgname-xetex:xetex
	$pkgname-luatex:lua
	"
source="https://ftp.tu-chemnitz.de/pub/tug/historic/systems/texlive/${pkgver:0:4}/texlive-$pkgver-source.tar.xz"

builddir="$srcdir"/texlive-$pkgver-source

_luatex="dvilualatex dviluatex lualollipop lualatex"
_pdftex="amstex cslatex csplain eplain etex jadetex latex lollipop mex
	mllatex mltex pdfetex pdfcslatex pdfcsplain pdfjadetex pdflatex
	pdfmex pdfxmltex texsis utf8mex xmltex"
_xetex="xelatex xelollipop"
_dvi="afm2tfm bbox dvigif dvipng dvips epsffit extractres includeres ps2eps psbook psjoin psnup psresize psselect pstops"

prepare() {
	default_prepare

	# Each poppler version recently broke the API, so special treatment is required
	local folder="texk/web2c/pdftexdir"
	cp -pv $folder/pdftoepdf-poppler0.86.0.cc $folder/pdftoepdf.cc
	cp -pv $folder/pdftosrc-poppler0.83.0.cc $folder/pdftosrc.cc
}

build() {
	mkdir -p $builddir/build && cd $builddir/build

	# builders keep failing when -jN == nproc
	export MAKEFLAGS="$MAKEFLAGS -j$((JOBS<16 ? JOBS : 16))"

	# fixme: detect systemzziplib
	#--with-system-zziplib \ fixme detect systemzziplib
	../configure -C \
		--build=$CBUILD \
		--host=$CHOST \
		--prefix=/usr \
		--sysconfdir=/etc \
		--mandir=/usr/share/man \
		--infodir=/usr/share/info \
		--localstatedir=/var \
		--enable-biber \
		--enable-epsfwin \
		--enable-ipc \
		--enable-luatex \
		--enable-mftalkwin \
		--enable-regiswin \
		--enable-shared \
		--enable-tektronixwin \
		--enable-unitermwin \
		--enable-xetex \
		--enable-dvipng \
		--enable-dvipsk \
		--enable-ps2eps \
		--enable-psutils \
		--disable-bibtex-x \
		--disable-chktex \
		--disable-cjkutils \
		--disable-detex \
		--disable-dialog \
		--disable-dvi2tty \
		--disable-dvisvgm \
		--disable-largefile \
		--disable-lcdf-typetools \
		--disable-multiplatform \
		--disable-native-texlive-build \
		--disable-pdfopen \
		--disable-ps2pkm \
		--disable-t1utils \
		--disable-tex4htk \
		--disable-ttf2pk2 \
		--disable-vlna \
		--disable-xindy \
		--with-ps=gs \
		--with-banner-add="/Alpine Linux" \
		--with-system-cairo \
		--with-system-freetype2 \
		--with-system-graphite2 \
		--with-system-harfbuzz \
		--with-system-icu \
		--with-system-libpaper \
		--with-system-libpng \
		--with-system-pixman \
		--with-system-poppler \
		--with-system-xpdf \
		--with-system-zlib \
		--with-x-dvi-toolkit=motif \
		--without-texinfo
	make
}

package() {
	cd $builddir/build

	make DESTDIR="$pkgdir" install

	local texcmd; for texcmd in $_pdftex; do
		ln -s pdftex "$pkgdir"/usr/bin/$texcmd
	done
	ln -s eptex "$pkgdir"/usr/bin/platex
	ln -s euptex "$pkgdir"/usr/bin/uplatex

	# As Alpine has packaged all TeXlive packages, there is no need for a
	# separate package manager. apk should be used to get and update texmf-dist
	rm "$pkgdir"/usr/bin/tlmgr

	# texmf-dist is not platform dependent, those are packaged in the
	# texmf-dist package
	rm -rf "$pkgdir"/usr/share/texmf-dist
}

xetex() {
	# Split off XeTeX because it depends on graphite/harfbuzz/icu
	pkgdesc="TeX typesetting engine supporting modern typography and bidirectional text"
	depends="$pkgname"

	install -d -m 0755 "$subpkgdir"/usr/bin
	mv "$pkgdir"/usr/bin/xetex "$subpkgdir"/usr/bin/

	local texcmd; for texcmd in $_xetex; do
		ln -s xetex "$subpkgdir"/usr/bin/$texcmd
	done
}

meta() {
	pkgdesc="A complete TeX distribution"
	depends="$pkgname $pkgname-doc $pkgname-luatex $pkgname-xetex xdvik $pkgname-dvi texmf-dist-full"

	mkdir -p "$subpkgdir"
}

dvi() {
	pkgdesc="Tools for dvi based workflow (e.g. dvips)"
	depends="$pkgname"

	install -d -m 0755 "$subpkgdir"/usr/bin
		for tool in $_dvi; do
		mv "$pkgdir/usr/bin/$tool" "$subpkgdir/usr/bin/"
	done
}

lua() {
	pkgdesc="LuaTeX is an extended version of pdfTeX, scriptable in Lua"
	depends="bash $pkgname"  # lua2dox_filter is a bash script

	mkdir -p "$subpkgdir" && cd "$subpkgdir"

	install -d -m 0755 usr/bin usr/lib

	mv "$pkgdir"/usr/bin/*lua* "$subpkgdir"/usr/bin/
	mv "$pkgdir"/usr/lib/lib*lua*.so.* "$subpkgdir"/usr/lib/

	local texcmd; for texcmd in $_luatex
		do ln -s luatex "$subpkgdir"/usr/bin/$texcmd
	done
	cd -
}

xdvi() {
	# currently, xdvi needs a number of files and scripts from texlive;
	# we split it off so that it doesn't drag in X and Motif.
	depends="texlive"
	pkgdesc="Xdvi from texlive, using the texlive libraries"
	provides="xdvi"

	mkdir -p "$subpkgdir" && cd "$subpkgdir"

	install -d -m 0755 usr/bin

	mv "$pkgdir"/usr/bin/xdvi "$pkgdir"/usr/bin/xdvi-* usr/bin/
}

sha512sums="65be52cb5e1b52f12feb62c6cf23e56c581b9dccb8d3b9ccc85c12c62b0cb67dd71de8d22d967d2cbf8403502c66bccb238523d13a0d081be104fc9f9c68b477  texlive-20200406-source.tar.xz"
